package com.wn.controller;

import com.wn.config.MinioConfig;
import com.wn.utils.Contents;
import com.wn.utils.MinioClientUtil;
import com.wn.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.UUID;
@RestController
public class UploadFileController {

    @Autowired
    private MinioConfig config;

    @Autowired
    private RedisTemplate redisTemplate;

    @Resource
    private MinioClientUtil minioClientUtil;
    /**
     * 用于上传文件的控制器
     */
    /**
     *
     * 文件上传需要注意的事项：
     *      1、请求方式必须是post方式
     *      2、用@RequestPart声明该接口接受的数据是流数据（上传的文件数据），springmvc会把前端传递过来的文件数据
     *      封装成MultipartFile对象
     *      3、参数名称必须跟前端上传框的name属性值一直
     */
    @PostMapping("/file/upload")
    public Result upload(@RequestPart MultipartFile file) throws Exception{
        //1、生成一个随机的不重复的图片名称
        String objectName = UUID.randomUUID().toString();
        //2、截取源文件名称的后缀
        String oldName = file.getOriginalFilename();
        //aaa.png
        objectName = objectName + oldName.substring(oldName.lastIndexOf("."));
        boolean flag = minioClientUtil.putObject(objectName, file.getInputStream());

        //上传图片后 存储到 redis中
        redisTemplate.opsForSet().add(Contents.ALL_IMAGE,objectName);

        String img = config.getEndpoint();

        //访问图片的Url:服务地址/桶/存储的图片名称
        String path = "http://" + img + ":9000/car/" + objectName;

        //3、如果上传成功把当前文件在minio里面的文件名称返回给前端
        if(flag) {
            return new Result(200, "图片上传成功", path);
        }else{
            return  new Result(200,"图片上传失败", "xxx.jpg");
        }
    }
}